package main

import (
	"fmt"
	"learn-go/6.interface/testing"
)

// curl https://www.imooc.com
//func main() {
//	resp,err:=http.Get("https://www.imooc.com")
//	if err != nil {
//		panic(err)
//	}
//
//	defer resp.Body.Close()
//
//	bytes, _ := ioutil.ReadAll(resp.Body)
//	fmt.Printf("%s\n", bytes)
//}

// better #1
//func retrieve(url string) string {
//	resp, err := http.Get(url)
//	if err != nil {
//		panic(err)
//	}
//
//	defer resp.Body.Close()
//
//	bytes, _ := ioutil.ReadAll(resp.Body)
//	return string(bytes)
//}
//
//func main() {
//	fmt.Println(retrieve("https://www.imooc.com"))
//}

// better #2
//func getRetriever() infra.Retriever {
//	return infra.Retriever{}
//}
//
//func main() {
//	//var retriever infra.Retriever
//	retriever := getRetriever()
//	fmt.Println(retriever.Get("https://www.imooc.com"))
//}

// better #3
func getRetriever() retriever {
	// return infra.Retriever{}
	return testing.Retriever{}
}

// Something that can "Get"
type retriever interface {
	Get(string) string
}

func main() {
	var r retriever = getRetriever() // 使用接口方便多种retriever
	fmt.Println(r.Get("https://www.imooc.com"))
}
